package myError

import (
	"card/constant"
	"fmt"
	"github.com/pkg/errors"
)

type MyError struct {
	Code int
	Err  error
}

func (e MyError) Error() string {
	return fmt.Sprintf("%v", e.Err)
}

func NewMyError(code int, err error) error {
	return &MyError{
		Code: code,
		Err:  err,
	}
}

func WarpException(msg string) error {
	return NewMyError(constant.ExceptionErrorCode, errors.WithStack(errors.New(msg)))
}

func WarpError(err error) error {
	return NewMyError(constant.ServerErrorCode, errors.WithStack(err))
}

func WarpValidate(msg string) error {
	return NewMyError(constant.ValidateErrorCode, errors.WithStack(errors.New(msg)))
}
